home *** CD-ROM | disk | FTP | other *** search
- ;* 25AUG85 @ 6:42PM
- ;* 65XX 16 BIT MACROS *
- ;**************************************
- ;* COPR 1985 BY IRWIN R. SHAPIRO *
- ;* PRESIDENT OF I.R.S. LABS *
- ;**************************************
- .OPT GEN
- ;**************************************
- R0 = $2
- R1 = R0+2
- R2 = R1+2
- R3 = R2+2
- R4 = R3+2
- R5 = R4+2
- R6 = R5+2
- R7 = R6+2
- R8 = R7+2
- R9 = R8+2
- RA = R9+2
- RB = RA+2
- RC = RB+2
- RD = RC+2
- RE = RD+2
- RF = RE+2
- ;**************************************
- .MAC TR
- ;RX,RY ;RX <- RY [16B]
- PHA ; WHO KNOWS WHATS IN IT
- LDA ?2 ; MOVE THE HI & LO BYTE
- STA ?1
- LDA ?2+1
- STA ?1+1
- PLA
- .MND
- .MAC ST
- ;RX,MEM ;RX -> MEMORY [16B]
- PHA
- LDA ?1
- STA ?2
- LDA ?1+1
- STA ?2+1
- PLA
- .MND
- .MAC LD
- ;RX,MEM ;RX <- MEMORY [16B]
- PHA
- LDA ?2
- STA ?1
- LDA ?2+1
- STA ?1+1
- PLA
- .MND
- .MAC STAT
- ;RX,(RY) ;RX -> (RY) [16B]
- PHA
- TYA
- PHA
- LDY #0
- LDA ?1
- STA ?2,Y
- LDA ?1+1
- INY
- STA ?2,Y
- PLA
- TAY
- PLA
- .MND
- .MAC LDAT
- ;RX,RY ;RX <- (RY) [16B]
- PHA
- TYA
- PHA
- LDY #0
- LDA ?2,Y
- STA ?1
- INY
- LDA ?2,Y
- STA ?1+1
- PLA
- TAY
- PLA
- .MND
- .MAC LDIM
- ;RX,WORD ;RX <- IMM.WORD [16B]
- PHA
- LDA ?3+1
- STA ?1
- LDA ?3+2
- STA ?1+1
- PHP
- CLC
- BCC ?4
- ?3 LDA ?2,Y ; IT'S NEVER EXECUTED
- ?4 PLP ; BUT IT'S AN EASY WAY
- PLA ; TO FAKE A WORD
- .MND
- .MAC LDLO
- ;RX,MEM ;RX <- MEMORY [8B]
- PHA
- LDA ?2
- STA ?1
- PLA
- .MND
- .MAC STLO
- ;RX,MEM ;RX -> MEMORY [8B]
- PHA
- LDA ?1
- STA ?2
- PLA
- .MND
- .MAC PUSH
- ;RX,RY ;RX -> STACK OF RY [16B]
- PHA
- TYA
- PHA
- SEC
- LDA ?2
- SBC #$2
- STA ?2
- LDA ?2+1
- SBC #0
- STA ?2
- LDA ?1+1
- LDY #0
- STA (?2),Y
- DEY
- LDA ?1
- STA (?2),Y
- PLA
- TAY
- PLA
- .MND
- .MAC PULL
- ;RX,RY ;RX <- STACK OF RY [16B]
- PHA
- TYA
- PHA
- LDY #1
- LDA (?2),Y
- STA ?1
- DEY
- LDA (?2),Y
- STA ?1+1
- CLC
- LDA ?2
- ADC #2
- STA ?2
- LDA ?2+1
- ADC #0
- STA ?2
- PLA
- TAY
- PLA
- .MND
- .MAC MUL
- ;RX,RY ;RX TIMES RY
- ; RY=LO WORD AND RY+1=HI WORD OF RESULT
- ; [16B IN & 32B OUT]
- PHA
- TXA
- PHA
- LDA #0
- STA ?2+2 ; ZERO OUT HI-WORD
- STA ?2+3
- LDX #17 ; 16 BIT WORDS
- CLC
- ?3 ROR ?2+3 ; SHIFT IT
- ROR ?2+2
- ROR ?2+1
- ROR ?2
- BCC ?4
- CLC
- LDA ?1 ; AND ADD IT
- ADC ?2+2
- STA ?2+2
- LDA ?1+1
- ADC ?2+3
- STA ?2+3
- ?4 DEX
- BNE ?3
- PLA
- TAX
- PLA
- .MND
- .MAC DIV
- ;RX,RY ;RX / RY
- ; RESULT RX = QUOTIENT,RX+1=REMAINDER
- PHA
- TXA
- PHA
- TYA
- PHA
- LDA #0
- STA ?1+2 ; ZERO HI BYTE OF DVEND
- STA ?1+3
- LDA ?2 ; CHECK FOR DIV BY ZERO
- ORA ?2+1
- BNE ?3 ; DO THE DIVISION
- STA ?1+1 ; ZERO IT OUT AND EXIT
- STA ?1
- BEQ ?4
- ?3 LDX #16
- ?5 ROL ?1
- ROL ?1+1
- ROL ?1+2
- ROL ?1+3
- SEC
- LDA ?1+2
- SBC ?2
- TAY
- LDA ?1+3
- SBC ?2+1
- BCC ?6
- STY ?1+2
- STA ?1+3
- ?6 DEX
- BNE ?5
- ROL ?1
- ROL ?1+1
- ?4 PLA
- TAY
- PLA
- TAX
- PLA
- .MND
- .MAC SUB
- ;RX,RY ;RY <- RX-RY
- ; [16B]
- ; WORKS SIGNED OR UNSIGNED
- PHA
- LDA ?1
- SEC
- SBC ?2
- STA ?2
- LDA ?1+1
- SBC ?2+1
- STA ?2+1
- PLA
- .MND
- .MAC ADD
- ;RX,RY ;RY <- RX+RY
- ; [16B]
- ; WORKS SIGNED OR UNSIGNED
- PHA
- LDA ?1
- CLC
- ADC ?2
- STA ?2
- LDA ?1+1
- ADC ?2+1
- STA ?2+1
- PLA
- .MND
- .MAC INC16
- ;RX ;RX <- RX+1
- ; [16B]
- INC ?1
- BNE ?2
- INC ?1+1
- ?2 .MND
- .MAC DEC16
- ;RX ;RX <- RX+1
- ; [16B]
- INC ?1 ; IT'S A LITTLE WEIRD
- DEC ?1 ; BUT IT WORK'S
- BNE ?2
- DEC ?1+1
- ?2 DEC ?1
- .MND
- .MAC PUSHUS
- ;RX ;PUSH RX ONTO RF STK
- PUSH ?1,RF ;[16B]
- .MND
- .MAC PUSHRS
- ; PUSH RX ONTO RE STK
- PUSH ?1,RE ;[16B]
- .MND
- .MAC PULLUS
- ;RX ;PULL RX FROM RF STK
- PULL ?1,RF ;[16B]
- .MND
- .MAC PULLRS
- ;RX ;PULL RX FROM RE STK
- PULL ?1,RE ;[16B]
- .MND
- ; *=2000
- ; TR R1,R2
- ; ST R1,$0600
- ; LD R2,%10110111
- ; STAT R5,(R9)
- ; LDAT R6,(R2)
- ; LDIM R4,$FF
- ; LDLO R4,65535
- ; STLO R7,$45
- ; PUSH R3,R4
- ; PULL R2,RE
- ; MUL R4,R5
- ; DIV R4,R5
- ; SUB R4,R5
- ; ADD R4,R5
- ; INC16 R8
- ; DEC16 RA
- ; PUSHUS R0
- ; PUSHRS R1
- ; PULLUS R2
- ; PULLRS R3
- .END